package qc.module.qms.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.qms.dto.element.ElementDto;
import qc.module.qms.entity.QmsElement;
import qc.module.qms.service.QmsElementService;

import java.util.List;

@RestController
@RequestMapping("/element")
public class ElementController {
    @Autowired
    private QmsElementService service;

    /**
     * 获取所有监测要素
     *
     * @return List<ElementDto> 监测要素列表
     */
    @GetMapping("/all")
    public List<QmsElement> getAll() {
        return service.getAllWithCache();
    }

    /**
     * 获取指定监测要素ID的监测要素信息
     *
     * @param id 监测要素编码
     * @return ElementDto 监测要素信息
     */
    @GetMapping("/get")
    public ElementDto getByParam(@RequestParam String id) throws QCPromptException {
        return service.get(id);
    }

    /**
     * 获取指定监测要素ID的监测要素信息
     *
     * @param id 监测要素编码
     * @return ElementDto 监测要素信息
     */
    @GetMapping("/get/{id}")
    public ElementDto getByPath(@PathVariable String id) throws QCPromptException {
        return service.get(id);
    }

    /**
     * 添加监测要素
     *
     * @param dto 监测要素信息
     * @return String 添加结果
     */
    @RequestMapping(value = "/add", method = {RequestMethod.POST, RequestMethod.PUT})
    public String add(@RequestBody ElementDto dto) {
        return service.add(dto);
    }

    /**
     * 修改监测要素
     *
     * @param dto 监测要素信息
     * @return String 修改结果
     */
    @RequestMapping(value = "/update", method = {RequestMethod.POST, RequestMethod.PUT})
    public String update(@RequestBody ElementDto dto) {
        return service.update(dto);
    }

    /**
     * 删除监测要素
     *
     * @param id 监测要素编码
     * @return String 删除结果
     */
    @DeleteMapping("/delete")
    public String deleteByParam(@RequestParam String id) {
        return service.delete(id);
    }
    
    /**
     * 删除监测要素
     *
     * @param id 监测要素编码
     * @return String 删除结果
     */
    @DeleteMapping("/delete/{id}")
    public String deleteByPath(@PathVariable String id) {return service.delete(id);}
}
